home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / procssng / alv.sun / alv.lha / src / dither.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-08  |  1.6 KB  |  68 lines

  1. #include <stdio.h>
  2. #include "defs.h"
  3.  
  4. nt             mask[] = {
  5.     126, 222, 167, 200, 216, 181,
  6.     230, 210, 94, 72, 242, 232,
  7.     153, 111, 36, 52, 193, 255,
  8.     200, 216, 181, 126, 222, 167,
  9.     72, 242, 232, 230, 210, 94,
  10.     52, 193, 255, 153, 111, 36
  11. };
  12. #define    BOXSIZE     6
  13.  
  14. har           *progname;
  15. har           *filename;
  16. ixrect        *pr1, *pr2;
  17.  
  18. #ifdef STANDALONE
  19. ain(argc, argv, envp)
  20. #else
  21. ither_main(argc, argv, envp)
  22. #endif
  23.     int             argc;
  24.     char          **argv;
  25.     char          **envp;
  26. {
  27.     int             boxsize;
  28.     int             mp;
  29.     register int    i, j, x, y;
  30.     int             levels;
  31.  
  32.     boxsize = BOXSIZE;
  33.     progname = strsave(argv[0]);
  34.     parse_profile(&argc, argv, envp);
  35.  
  36.     while ((gc = getopt(argc, argv, " ")) != EOF)
  37.         switch (gc) {
  38.         case '?':
  39.             errflag++;
  40.             break;
  41.         }
  42.  
  43.     if (errflag)
  44.         error((char *) 0, "Usage: %s: [infile] [outfile]\n", progname);
  45.  
  46.     for (stream = 0; optind < argc; stream++, optind++)
  47.         if (stream < 2 && strcmp(argv[optind], "-") != 0)
  48.             if (freopen(argv[optind], mode[stream], f[stream]) == NULL)
  49.                 error("%s %s", PR_IO_ERR_INFILE, argv[optind]);
  50.  
  51.     if ((pr1 = pr_load(stdin, NULL)) == NULL)
  52.         error(PR_IO_ERR_RASREAD);
  53.  
  54.     if (pr1->pr_depth != 8)
  55.         error("Input image not 8 bits deep");
  56.  
  57.     if ((pr2 = mem_create(pr1->pr_size.x, pr1->pr_size.y, 1)) == NULL)
  58.         error("mem_create returned NULL");
  59.  
  60.     for (y = 0; y < pr1->pr_size.y; y += boxsize)
  61.         for (x = 0; x < pr1->pr_size.x; x += boxsize)
  62.             for (j = 0, mp = 0; j < boxsize; j++)
  63.                 for (i = 0; i < boxsize; i++)
  64.                     pr_put(pr2, x + i, y + j, (pr_get(pr1, x + i, y + j) > mask[mp++]) ? 0 : 1);
  65.  
  66.     pr_dump(pr2, stdout, NULL, RT_STANDARD, 0);
  67. }
  68.